User-Guided Program Reasoning using Bayesian Inference

  1. User-Guided Program Reasoning using Bayesian Inference

User-Guided Program Reasoning using Bayesian Inference

这篇文章和《ProbLog: A Probabilistic Prolog and its Application in Link Discovery》有些相似小。在Problog一文中,加上了概率值的是Datalog中的一条条规则,通过BDD来解决概率计算。而在本文中,是将Datalog的对应的派生图视作贝叶斯网络来解决的,同样也需要将规则加上概率值。

https://zh.wikipedia.org/wiki/%E8%B2%9D%E6%B0%8F%E7%B6%B2%E8%B7%AF#

这篇文章最主要的算法就是这个:

image-20240516095417536

详细解释一下:

上面这套流程中有个东西没有讲是怎么来的,就是这个各个规则的触发概率​。对于完全标记数据的语料库,规则概率只是规则在给定真实假设的情况下产生错误结论的次数除以总次数得到的值。对于标记较少的数据集,一个面临潜在(或未观察到)变量的挑战,可以用下面描述的期望最大化(EM)算法来解决。

假设我们有一个数据集,这个数据集标注了各个需要警报的地方的真实结果(即需要警报的地方实际上要不要警报)。现在我们要拿这个去推算规则的概率。根据EM算法的过程,首先随机初始化各规则的概率,然后根据派生图导出的贝叶斯网络得到,即报警的概率。然后利用下面的公式进行更新:

其中代表是与规则有关的地方。为真实结果,若为0的话整个也就为0。

经过一轮轮迭代最终达到稳定就是各个规则的触发概率了。

但是,这篇文章最神奇的地方我觉得也在这里,讲EM算法时来了这么一段:

image-20240516234151212

这个的意思是他在实验中根本没用EM算法,而是直接把概率定成0.999了吗😥

script>